package fr.ysa.services.config;

import fr.ysa.persistence.requetes.ConfigRequetes;
import fr.ysa.persistence.requetes.Trie;
import fr.ysa.persistence.requetes.filtres.Filtre;
import fr.ysa.persistence.requetes.filtres.ValueFiltre;
import fr.ysa.services.config.FiltreDto.TYPE;
import fr.ysa.services.config.TrieDto.ORDRE;
import fr.ysa.services.config.ValueFiltreDto.OPERATION;

public class ConfigRequetesTransform {

	public ConfigRequetesDto transform(ConfigRequetes config) {
		
		ConfigRequetesDto configDto = new ConfigRequetesDto();
		configDto.setDebut(config.getDebut());
		configDto.setNombre(config.getNombre());
		configDto.setRegroupement(config.getRegroupement());
		FiltreDto filtreDto;
		for (Filtre filtre : config.getFiltres()) {
			filtreDto = new FiltreDto();
			filtreDto.setName(filtre.getName());
			filtreDto.setType(TYPE.valueOf(filtre.getType().name()));
			
			ValueFiltreDto valueFiltreDto;
			for (ValueFiltre valueFiltre : filtre.getValues()) {
				valueFiltreDto = new ValueFiltreDto();
				valueFiltreDto.setOperation(OPERATION.valueOf(valueFiltre.getOperation().name()));
				valueFiltreDto.setValue(valueFiltre.getValue());
				filtreDto.addValue(valueFiltreDto);
			}
			
			configDto.getFiltres().add(filtreDto);
		}
		
		TrieDto trieDto;
		for (Trie trie : config.getTries()) {
			trieDto = new TrieDto();
			trieDto.setChamp(trie.getChamp());
			trieDto.setOrdre(ORDRE.valueOf(trie.getOrdre().name()));
			configDto.getTries().add(trieDto);
		}
		
		return configDto;
	}

	public ConfigRequetes transform(ConfigRequetesDto configDto) {
		
		ConfigRequetes config = new ConfigRequetes();
		config.setDebut(configDto.getDebut());
		config.setNombre(configDto.getNombre());
		config.setRegroupement(configDto.getRegroupement());
		Filtre filtre;
		for (FiltreDto filtreDto : configDto.getFiltres()) {
			filtre = new Filtre();
			filtre.setName(filtreDto.getName());
			filtre.setType(fr.ysa.persistence.requetes.filtres.Filtre.TYPE.valueOf(filtreDto.getType().name()));
			
			ValueFiltre valueFiltre;
			for (ValueFiltreDto valueFiltreDto : filtreDto.getValues()) {
				valueFiltre = new ValueFiltre();
				valueFiltre.setOperation(fr.ysa.persistence.requetes.filtres.ValueFiltre.OPERATION.valueOf(valueFiltreDto.getOperation().name()));
				valueFiltre.setValue(valueFiltreDto.getValue());
				filtre.addValue(valueFiltre);
			}
			
			config.getFiltres().add(filtre);
		}
		
		Trie trie;
		for (TrieDto trieDto : configDto.getTries()) {
			trie = new Trie();
			trie.setChamp(trieDto.getChamp());
			trie.setOrdre(fr.ysa.persistence.requetes.Trie.ORDRE.valueOf(trieDto.getOrdre().name()));
			config.getTries().add(trie);
		}
		
		return config;
	}

}
